/**********************************
  实时窗口的右半部分
  author 周翔
  2012-8-25

  下面还需完成的是对类内部信号的在转发，以供外部相连接




  **********************************/
#ifndef REALDATARIGHTWIDGET_H
#define REALDATARIGHTWIDGET_H

#include "tablewidget.h"
#include "linegraphwidget.h"
#include "setargumentswidget.h"
#include "model/node.h"

#include <QWidget>



class ZBNNMW;

namespace Ui {
class RealDataRightWidget;
}

class RealDataRightWidget : public QWidget
{
    Q_OBJECT
    
public:
    explicit RealDataRightWidget(QWidget *parent = 0);
    ~RealDataRightWidget();
    void setOneOrMore(bool flag) {isOne = flag;}
    void clearListWidget();
signals:
    void sig_whichWidget(int index);
    /**
     * @brief sig_aFilter 向外部发送一个策略
     * @param n
     */
    void sig_aFilter(const Filter &n);


    void sig_tree_clear();
public slots:
    /**
     * @brief setListWidgetItems 向列表窗体添加元素
     * @param list
     */
    void setListWidgetItems(const QList<QTableWidgetItem*> &list);
    /*
     *Param: adress 节点地址标识节点 value 数据的值
     *Funtion： 折线图接受数据,提供外部的使用的接口
     *
     *
     */
    void slt_lineGrapShowData(const QString& adress,int value);
    /**
     * @brief slt_lineGrapShowData
     * @param name
     * @param value
     */
    void slt_lineGrapShowData(ushort name, int value);
    /**
     * @brief slt_netTopologyBuild 旧的接口，不使用
     * @param value
     */
    void slt_netTopologyBuild(const QString &value);
    /**
     * @brief slt_newNode 新节点
     * @param n
     */
    void slt_newNode(const Node &n);
    /**
     * @brief slt_oldNode 重新加入网络的节点
     * @param n
     */
    //  void slt_oldNode(const Node &n);
    /**
     * @brief slt_showAllorOne 显示拓扑还是折线
     * @param value
     */
    void slt_showAllorOne(const QString &value);//



    /**
     * @brief slt_ChangNodeState
     * @param n
     * @param status
     */
    void slt_ChangNodeState(const Node &n);


    void slt_ChangNodeState(int type, const QString &addr,
                                                 const QString &paddr,
                                                 ushort _name, bool status);



    void slt_updataNodeValue(ushort name,int value);

    /**
     * @brief slt_statesChange 对节点状态进行更新
     * @param name 地址
     * @param states 状态
     */
    // void slt_statesChange(ushort name,bool states);
protected slots:
    void showListWidget();
    void showTopologyMap();
    void showLineGraph();
    void showSetArguments();
    void doChartButton();

private:
    Ui::RealDataRightWidget *ui;

    bool isOne;//标志被选中树的节点，一个还是两个以上 true = one ,false = all

    TableWidget *listWidget;//列表窗口
    ZBNNMW *topologyMap;//拓扑图窗口
    //QWidget *topologyMap;//拓扑图窗口
    LineGraphWidget *lineGraph;//折线图窗口
    SetArgumentsWidget *setArguments;//设置参数窗口
    void initUI();
};

#endif // REALDATARIGHTWIDGET_H
